from django import forms
from web.forms.bootstrap import BootStrapForm
from web import models
from django.core.validators import ValidationError
from utils.tencent.cos import check_file

class FolderModelForm(BootStrapForm,forms.ModelForm):
    class Meta:
        model = models.FileRepository
        fields = ['name']

    def __init__(self,request,parent_obj,*arg,**kwargs):
        super(FolderModelForm, self).__init__(*arg,**kwargs)
        self.request = request
        self.parent_obj = parent_obj


    def clean_name(self):
        name = self.cleaned_data['name']

        # 数据库判断，当前目录下，文件夹是否存在
        queryset = models.FileRepository.objects.filter(name=name,file_type=2,project=self.request.tracer.project)
        if self.parent_obj:
            exists = queryset.filter(parent=self.parent_obj).exists()
        else:
            exists = queryset.filter(parent__isnull=True).exists()
        if exists:
            raise ValidationError('文件夹已存在')
        return name


class FileModelForm(forms.ModelForm):
    etag = forms.CharField(label='ETag')
    class Meta:
        model = models.FileRepository
        exclude = ['project','file_type','update_user','update_time']

    def __init__(self,request,*args,**kwargs):
        super(FileModelForm, self).__init__(*args,**kwargs)
        self.request = request

    def clean_file_path(self):
        return "https://{}".format(self.cleaned_data['file_path'])

    """
        def clean(self):
        key = self.cleaned_data['key']
        etag = self.cleaned_data['etag']
        size = self.cleaned_data['file_size']
        if not key or not etag:
            return self.cleaned_data

        # 向 cos 校验文件是否合法
        # SDK 的功能
        from qcloud_cos.cos_exception import CosServiceError
        try:
            result = check_file(bucket=self.request.tracer.project.bucket,region=self.request.project.region,key=key)
            print(result)
        except CosServiceError as e:
            self.add_error('key','文件不存在')
            return self.cleaned_data

        cos_etag = result.get("ETag")
        if cos_etag != etag:
            self.add_error("etag","ETag错误")
        cos_lenght = result.get('Content-Lenght')
        if int(cos_lenght) != size:
            self.add_error('size','文件大小错误')
        return self.cleaned_data
    """
